home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ROADS15.ARJ / ROADS.H < prev    next >
C/C++ Source or Header  |  1993-12-27  |  5KB  |  144 lines

  1. #define ROADS_H
  2.  
  3. /* GENERIC TILING DEFINITIONS */
  4.  
  5. #define WORLD_WIDTH       105    /* IN TILES, WIDTH OF "PLAYFIELD"  */
  6. #define WORLD_HEIGHT      100    /* IN TILES, HEIGHT OF "PLAYFIELD" */
  7. #define WORLD_TILES_TOTAL 10500  /* (WORLD_WIDTH*WORLD_HEIGHT)     */
  8.  
  9. #define TILE_WIDTH       16  /* IN PIXELS, WIDTH OF TILE    */
  10. #define TILE_HEIGHT      16  /* IN PIXELS, HEIGHT OF TILE   */
  11. #define VIEW_WIDTH       20  /* (SCREEN_WIDTH/TILE_WIDTH)   */
  12. #define VIEW_HEIGHT      15  /* (SCREEN_HEIGHT/TILE_HEIGHT) */
  13. #define VIEW_TILES_TOTAL 300 /* (VIEW_WIDTH*VIEW_HEIGHT)    */
  14. #define MIXING_TILE      299 /* (VIEW_TILES_TOTAL-1)        */
  15. #define EMPTY_TILE -1   /* STANDARD INDEX FOR A SEE-THROUGH TILE */
  16. #define ERROR_TILE -2   /* STANDARD INDEX FOR ERRORS! */
  17.  
  18. /* PROTOTYPES */
  19.  
  20. void create_roads (void);
  21. int roadexit (int road, int direction);
  22. int makeintersection (int road, int ramp);
  23. void init_foreground (void);
  24. void init_background (void);
  25. void add_dirt_edges (void);
  26. void init_world(void);
  27. int redraw (int draw_type);
  28. void init_video (void);
  29. void init_data (void);
  30. void program_shutdown (char *msg, int errcode);
  31. void place_tile_block (int x1, int y1, int x2, int y2);
  32. void init_anim (void);
  33. void animate (void);
  34. void update_tile (int tile);
  35. void gogofrog (void);
  36.  
  37. /* VIDEO MODE DEFINITIONS */
  38. #define VMODE  22
  39. #define VPAGES 3
  40. #define SCREEN_WIDTH    320
  41. #define SCREEN_HEIGHT   240
  42. #define IMAGES "roads.gif" /* IMAGE CONTAINING TILES */
  43.  
  44. /* VIDEO PAGE DEFINITIONS */
  45. #define VIEWPAGE1 0
  46. #define VIEWPAGE2 1
  47. #define TILEPAGE  2
  48.  
  49. /* STANDARD DEFINITIONS */
  50. #define FALSE 0
  51. #define TRUE 1
  52.  
  53. /* CHECKS IF A TILE IS A ROAD OR NOT */
  54. #define isroad(r) (r>=FIRST_ROAD_TILE && r<=LAST_ROAD_TILE)
  55.  
  56. #define REFRESH         0
  57. #define SCROLL_UP       1
  58. #define SCROLL_DOWN     2
  59. #define SCROLL_LEFT     3
  60. #define SCROLL_RIGHT    4
  61. #define SCROLL_UR       5
  62. #define SCROLL_DR       6
  63. #define SCROLL_DL       7
  64. #define SCROLL_UL       8
  65. #define NONFLIP_SCROLL_UP       11
  66. #define NONFLIP_SCROLL_DOWN     12
  67. #define NONFLIP_SCROLL_LEFT     13
  68. #define NONFLIP_SCROLL_RIGHT    14
  69. #define NONFLIP_REFRESH         15
  70.  
  71. #define MAX_FAILS 50 /* MAXIMUM NUMBER OF ATTEMPTS TO PLACE TILES */
  72.  
  73. /*
  74.  *
  75.  * MACROS TO CONVERT TILES FROM "ROW/COLUMN" FORMAT TO "INDEX" FORMAT
  76.  *
  77.  */
  78.  
  79.         /* WORLD SPACE CONVERSIONS */
  80. #define WORLD_TILE(x,y) ((x)+(y)*WORLD_WIDTH) /* CONVERTS DUAL X,Y TO SINGLE */
  81. #define WORLD_TILE_X(z) ((z)%WORLD_WIDTH)     /* CONVERTS SINGLE TO DUAL X   */
  82. #define WORLD_TILE_Y(z) ((z)/WORLD_WIDTH)     /* CONVERTS SINGLE TO DUAL Y   */
  83.  
  84.         /* VIEW SPACE CONVERSIONS */
  85. #define VIEW_TILE(x,y)  ((x)+(y)*VIEW_WIDTH)  /* CONVERTS DUAL X,Y TO SINGLE */
  86. #define VIEW_TILE_X(z)  ((z)%VIEW_WIDTH)      /* CONVERTS SINGLE TO DUAL X   */
  87. #define VIEW_TILE_Y(z)  ((z)/VIEW_WIDTH)      /* CONVERTS SINGLE TO DUAL Y   */
  88.  
  89. /* RETURNS 1 IF A SINGLE WORLD TILE INDEX IS WITHIN THE VIEWING SCREEN */
  90. #define is_viewable(x)  (WORLD_TILE_X(x)>=view_x &&          \
  91.                         WORLD_TILE_X(x)<view_x+VIEW_WIDTH && \
  92.                         WORLD_TILE_Y(x)>=view_y &&           \
  93.                         WORLD_TILE_Y(x)<view_y+VIEW_HEIGHT)  \
  94.  
  95. /* CONVERTS A WORLD INDEX INTO A VIEW INDEX -- USE IS_VIEWABLE TO MAKE */
  96. /* SURE THE WORLD INDEX IS WITHIN THE VIEWING AREA!                    */
  97. #define WORLD_TO_VIEW(x) VIEW_TILE(WORLD_TILE_X((x))-view_x,WORLD_TILE_Y((x))-view_y)
  98.  
  99. #define DONS_VIEW_TO_WORLD(x) (WORLD_TILE (view_x, view_y) + (VIEW_TILE_Y (x) * WORLD_WIDTH) + VIEW_TILE_X (x)  /* CONVERT VIEW SINGLE TO WORLD SINGLE */
  100. #define VIEW_TO_WORLD(x) (WORLD_TILE (VIEW_TILE_X (x) + view_x, VIEW_TILE_Y (x) + view_y)) /* CONVERT VIEW SINGLE TO WORLD SINGLE */
  101.  
  102. /*
  103.  *
  104.  * MACROS TO EASE COPYING OF TILES BETWEEN AND AMONG PAGES
  105.  *
  106.  */
  107.  
  108.    /* INTENRAL MACRO USED IN COPY TILE MACROS -- USER, DO NOT CALL! */
  109. #define COPY_TILE_CORE(from,to,spage,dpage)        \
  110.     ((from)%VIEW_WIDTH)*TILE_WIDTH,         \
  111.     (((from)%VIEW_WIDTH)+1)*TILE_WIDTH-1,   \
  112.     ((from)/VIEW_WIDTH)*TILE_HEIGHT,        \
  113.     (((from)/VIEW_WIDTH)+1)*TILE_WIDTH-1,   \
  114.     ((to)%VIEW_WIDTH)*TILE_WIDTH,           \
  115.     (((to)/VIEW_WIDTH)+1)*TILE_HEIGHT-1,    \
  116.     spage, dpage
  117.  
  118.     /* TRANSPARENT TILE COPY FROM HIDDEN PAGE TO ACTIVE PAGE */
  119. #define copy_tile_tr(from_tile,to_tile) \
  120.     fg_tcxfer (COPY_TILE_CORE(from_tile,to_tile,TILEPAGE,VIEWPAGE))
  121.  
  122.     /* OPAQUE TILE COPY FROM HIDDEN PAGE TO ACTIVE PAGE */
  123. #define copy_tile_op(from_tile,to_tile) \
  124.     fg_transfer (COPY_TILE_CORE(from_tile,to_tile,TILEPAGE,VIEWPAGE))
  125.  
  126.     /* TRANSPARENT TILE COPY */
  127. #define pagecopy_tile_tr(from_tile,to_tile,sourcepage,destpage) \
  128.     fg_tcxfer (COPY_TILE_CORE(from_tile,to_tile,sourcepage,destpage))
  129.  
  130.     /* OPAQUE TILE COPY FROM */
  131. #define pagecopy_tile_op(from_tile,to_tile,sourcepage,destpage) \
  132.     fg_transfer (COPY_TILE_CORE(from_tile,to_tile,sourcepage,destpage))
  133.  
  134. struct ANIMATION
  135. {
  136.     int anm;        /* NUMBER USED TO ENCODE ANIMATION IN WORLD */
  137.     int total;      /* TOTAL NUMBER OF TILES USED IN ANIMATION  */
  138.     int first;      /* FIRST TILE NO. IN ANIMATION              */
  139.     int current;    /* TILE CURRENTLY BEING SHOWN IN ANIMATION  */
  140.     int delay;      /* DELAY BETWEEN TILES IN CLOCK TICKS       */
  141.     long next;      /* TIME OF NEXT UPDATE                      */
  142. };
  143.  
  144.